;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;//BORRA MODELOS NO ELEGIDOS///////////////////////////////////////////////////////////////////////////////////
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;BORRAR PORTATILES QUE NO TENGAN EL NOMBRE DADO
(defrule borrar-modelos-no-elegidos
	?modelo <- (fase borrar-modelos-no-elegido ?nombre)
	=> 
	;;MOSTRAR CARACTERISTICAS
	(retract ?modelo)
	;;obtenemos todos los portatiles
	(bind ?result (run-query* obtener-portatiles))
	(while (?result next)
		;;Para cada uno de los portatiles
		(bind ?port (?result getObject port))
		;;Si no cumplen la condicion, los eliminamos de la base de conocimiento
		(if(neq ?port.nombre ?nombre) then
				(modify ?port (seleccionado FALSE))
		)
	)	
	;;Volvemos a lanzar el menu principal
)

;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;//BUSQUEDA POR SERIE///////////////////////////////////////////////////////////////////////////////////
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
(defrule busqueda-por-serie
	(fase busqueda-tipo 1)
	=>
	( printout t "--------------Seleccione el modelo---------------------" crlf )
	( printout t "---Seleccione la serie deseada----" crlf )
	( printout t "1. Serie F." crlf )
	( printout t "2. Serie E" crlf )
	( printout t "3. Serie CW" crlf )
	( printout t "4. Serie S." crlf)
	(assert (serie (read)) ) 
)

 ;; Mala seleccion de serie
(defrule seleccion-serie-erronea
	?fase <- (fase busqueda-tipo 1)
	?eleccion <- (serie ?numero)
  
	(test (or (not(integerp ?numero))
		(< ?numero 1)
		(> ?numero 4) 
		) ) 	
	=>
	(retract ?fase ?eleccion )
	(assert (fase busqueda-tipo 1) )
	(printout t "Opcion invalida." crlf)
)

;; Buena seleccion de serie
(defrule seleccion-serie-correcta
	?fase <- (fase busqueda-tipo 1)
	?eleccion <- (serie ?numero)
	(test (and (integerp ?numero)
		(> ?numero 0)
		(< ?numero 5) 
	) ) 
	=>
	(retract ?fase ?eleccion)
	
	(assert (fase busqueda-modelo ?numero))
	(printout t "Opcion valida." crlf)
)


;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;//BUSQUEDA POR MODELO DE LA SERIE F////////////////////////////////////////////////////////////////
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
(defrule busqueda-por-modelo-SerieF
	(fase busqueda-modelo 1)
	=>
	( printout t "--------------Seleccione el modelo---------------------" crlf )
	( printout t "1. VPCF11Z1E/BI ." crlf )
	( printout t "2. VPCF11M1E/H " crlf )
	(assert (modelo (read)) ) 

)

		 ;; Mala seleccion de modelo
		(defrule seleccion-modelo-erronea
			?fase <- (fase busqueda-modelo 1)
			?eleccion <- (modelo ?numero)
			(test (or (not(integerp ?numero))
				(< ?numero 1)
				(> ?numero 2) 
				) ) 	
			=>
			(retract ?fase ?eleccion )
			(printout t "Opcion invalida." crlf)
			(assert (fase busqueda-modelo 1) )
			
		)

		;; Buena seleccion de modelo
		(defrule seleccion-modelo-correcta
			?fase <- (fase busqueda-modelo 1)
			?eleccion <-(modelo ?numero)
			(test (and (integerp ?numero)
				(> ?numero 0)
				(< ?numero 3) 
			) ) 
			=>
			(retract ?fase ?eleccion)
			(assert (fase modelo-elegido-serieF ?numero))
		)

		;;ELEGIDO EL MODELO VPCF11Z1E/BI
		(defrule modelo-elegido-serieF1
			?modelo <- (fase modelo-elegido-serieF 1)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCF11Z1E/BI))
			(assert (criterio (texto Serie_F_Modelo_VPCF11Z1E/BI)))
		)

		;;ELEGIDO EL MODELO VPCF11M1E/H
		(defrule modelo-elegido-serieF2
			?modelo <- (fase modelo-elegido-serieF 2)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCF11M1E/H))
			(assert (criterio (texto Serie_F_Modelo_VPCF11M1E/H)))
		)

;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;//BUSQUEDA POR MODELO DE LA SERIE E////////////////////////////////////////////////////////////////
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
(defrule busqueda-por-modelo-SerieE
	(fase busqueda-modelo 2 )
	=>
	( printout t "--------------Seleccione el modelo---------------------" crlf )
	( printout t "1. VPCEA1X5E ." crlf )
	( printout t "2. VPCEB1X5E " crlf )
	( printout t "3. VPCEC1X5E " crlf )
	(assert (modelo (read)) ) )

		 ;; Mala seleccion de modelo
		(defrule seleccion-modelo-erroneaE
			?fase <- (fase busqueda-modelo 2)
			?eleccion <- (modelo ?numero)
		  
			(test (or (not(integerp ?numero))
				(< ?numero 1)
				(> ?numero 3) 
				) ) 	
			=>
			(retract ?fase ?eleccion )
			(assert (fase busqueda-modelo 2) )
			(printout t "Opcion invalida." crlf)
		)

		;; Buena seleccion de modelo
		(defrule seleccion-modelo-correctaE
			?fase <- (fase busqueda-modelo 2)
			?eleccion <- (modelo ?numero)
			(test (and (integerp ?numero)
				(> ?numero 0)
				(< ?numero 4) 
			) ) 
			=>
			(retract ?fase ?eleccion)
			(printout t "bien." crlf)
			(assert (fase modelo-elegido-serieE ?numero))
		)

		;;ELEGIDO EL MODELO VPCEA1X5E
		(defrule modelo-elegido-serieE1
			?modelo <- (fase modelo-elegido-serieE 1)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCEA1X5E))
			(assert (criterio (texto Serie_E_Modelo_VPCEA1X5E)))
		)

		;;ELEGIDO EL MODELO VPCEB1X5E
		(defrule modelo-elegido-serieE2
			?modelo <- (fase modelo-elegido-serieE 2)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCEB1X5E))
			(assert (criterio (texto Serie_E_Modelo_VPCEB1X5E)))
		)

		;;ELEGIDO EL MODELO VPCEC1X5E
		(defrule modelo-elegido-serieE3
			?modelo <- (fase modelo-elegido-serieE 3)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCEC1X5E))
			(assert (criterio (texto Serie_E_Modelo_VPCEC1X5E)))
		)
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;//BUSQUEDA POR MODELO DE LA SERIE CW///////////////////////////////////////////////////////////////////
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
(defrule busqueda-por-modelo-SerieCW
	(fase busqueda-modelo 3 )
	=>
	( printout t "--------------Seleccione el modelo---------------------" crlf )
	( printout t "1. VPCCW2S1E/R" crlf )
	(assert (modelo (read)) ) 
)
	
		 ;; Mala seleccion de modelo
		(defrule seleccion-modelo-erroneaCW
			?fase <- (fase busqueda-modelo 3)
			?eleccion <- (modelo ?numero)
		  
			(test (or (not(integerp ?numero))
				(< ?numero 1)
				(> ?numero 1) 
				) ) 	
			=>
			(retract ?fase ?eleccion )
			(assert (fase busqueda-modelo 3) )
			(printout t "Opcion invalida." crlf)
		)

		;; Buena seleccion de modelo
		(defrule seleccion-modelo-correctaCW
			?fase <- (fase busqueda-modelo 3)
			?eleccion <- (modelo ?numero)
			(test (and (integerp ?numero)
				(> ?numero 0)
				(< ?numero 2) 
			) ) 
			=>
			(retract ?fase ?eleccion)
			(printout t "bien." crlf)
			(assert (fase modelo-elegido-serieCW ?numero))
		)

		;;ELEGIDO EL MODELO VPCCW2S1E/R
		(defrule modelo-elegido-serieCW1
			?modelo <- (fase modelo-elegido-serieCW 1)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCCW2S1E/R))
			(assert (criterio (texto Serie_CW_Modelo_VPCCW2S1E/R)))
		)	


;;///////////////////////////////////////////////////////////////////////////////////////////////////////
;;//BUSQUEDA POR MODELO DE LA SERIE S///////////////////////////////////////////////////////////////////
;;///////////////////////////////////////////////////////////////////////////////////////////////////////
(defrule busqueda-por-modelo-SerieS
	(fase busqueda-modelo 4 )
	=>
	( printout t "--------------Seleccione el modelo---------------------" crlf )
	( printout t "1. VPCS11X9E/B" crlf )
	( printout t "2. VPCS11V9E/B " crlf )
	( printout t "3. VPCS11M1E/W " crlf )
	( printout t "4. VPCS11V5E" crlf )
	( printout t "5. VPCS11X5E" crlf )
	(assert (modelo (read)) ) 
)

		 ;; Mala seleccion de modelo
		(defrule seleccion-modelo-erroneaS
			?fase <- (fase busqueda-modelo 4)
			?eleccion <- (modelo ?numero)
		  
			(test (or (not(integerp ?numero))
				(< ?numero 1)
				(> ?numero 5) 
				) ) 	
			=>
			(retract ?fase ?eleccion )
			(assert (fase busqueda-modelo 4) )
			(printout t "Opcion invalida." crlf)
		)

		;; Buena seleccion de modelo
		(defrule seleccion-modelo-correctaS
			?fase <- (fase busqueda-modelo 4)
			?eleccion <- (modelo ?numero)
			(test (and (integerp ?numero)
				(> ?numero 0)
				(< ?numero 6) 
			) ) 
			=>
			(retract ?fase ?eleccion)
			(assert (fase modelo-elegido-serieS ?numero))
		)
		
		;;ELEGIDO EL MODELO VPCS11X9E/B
		(defrule modelo-elegido-serieS1
			?modelo <- (fase modelo-elegido-serieS 1)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCS11X9E/B))
			(assert (criterio (texto Serie_S_Modelo_VPCS11X9E/B)))
		)

		;;ELEGIDO EL MODELO VPCS11V9E/B
		(defrule modelo-elegido-serieS2
			?modelo <- (fase modelo-elegido-serieS 2)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCS11V9E/B))
			(assert (criterio (texto Serie_S_Modelo_VPCS11V9E/B)))
		)

		;;ELEGIDO EL MODELO VPCS11M1E/W
		(defrule modelo-elegido-serieS3
			?modelo <- (fase modelo-elegido-serieS 3)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCS11M1E/W))
			(assert (criterio (texto Serie_S_Modelo_VPCS11M1E/W)))
		)
		
		;;ELEGIDO EL MODELO VPCS11V5E
		(defrule modelo-elegido-serieS4
			?modelo <- (fase modelo-elegido-serieS 4)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCS11V5E))
			(assert (criterio (texto Serie_S_Modelo_VPCS11V5E)))
		)
		
		;;ELEGIDO EL MODELO VPCS11X5E
		(defrule modelo-elegido-serieS5
			?modelo <- (fase modelo-elegido-serieS 5)
			=> 
			;;MOSTRAR CARACTERISTICAS
			(retract ?modelo)
			(assert (fase borrar-modelos-no-elegido VPCS11X5E))
			(assert (criterio (texto Serie_S_Modelo_VPCS11X5E)))	
		)





